/**
 * (C) Copyright 2021 Huawei and NiCEDA(Nanjing Industrial Innovation Center of EDA).
 * All Rights Reserved.
 *
 * This software including any source code is protected by copyright law and international treaties and may solely
 * be used for the joint project of EDA helper development.
 * Huawei and NiCEDA retain full ownership rights in the software including any source code, including, but not
 * limited to, patents, copyrights, implementation and licensing rights therein, the rights to modify and use the
 * software including any source code for any purpose, the right to assign or donate it to a third party.
 * NO PATENT LICENSES OF ANY PARTY ARE HEREBY GRANTED BY IMPLICATION, ESTOPPEL OR OTHERWISE.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, ARE DISCLAIMED,
 * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * This copyright notice must be included in all copies or derivative works.
 */

#ifndef SRC_DM_DATA_CONTAINER_BUILT_IN_ENTITY_TYPE_H_
#define SRC_DM_DATA_CONTAINER_BUILT_IN_ENTITY_TYPE_H_

#include "utils/log_adapter.h"

#include <cstdint>
#include <string>

namespace db {
namespace data_container {

class BuiltInEntityType {
  public:
    enum {
        kLayout,
        kSchematic,
        kSymbol,
        kNetlist,
        kWafer,
        kVerilogAms,
        kVhdlAms,
        kVerilog,
        kVhdl,
        kHierDesign,
        kSystemVerilog,
        kSpectre,
        kSpice,
        kHspice,
        kCdl,
        kNumTypes
    };

    BuiltInEntityType(uint32_t type);
    BuiltInEntityType(const std::string &name);
    ~BuiltInEntityType() {}

    operator uint32_t() const;

    std::string GetName() const;

  private:
    uint32_t type_;
};

}  // namespace data_container
}  // namespace db

#endif  // SRC_DM_DATA_CONTAINER_BUILT_IN_ENTITY_TYPE_H_
